www.gusucode.com > 基于Visual C++高级界面特效制作百例源码程序 > 基于Visual C++高级界面特效制作百例源码程序/code/char22/XStatusBarProject/MainFrm.cpp
#include "stdafx.h" #include "StatusBar.h" #include "MainFrm.h" #include "XPaneText.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_UPDATE_COMMAND_UI(ID_INDICATOR_OVR, OnUpdateIndicatorOvr) ON_WM_LBUTTONDBLCLK() ON_WM_RBUTTONDBLCLK() ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // Statusleistenanzeige ID_INDICATOR_COUNT, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_OVR, ID_INDICATOR_SCRL, }; CMainFrame::CMainFrame() {} CMainFrame::~CMainFrame() {} int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // Fehler beim Erzeugen } //************************************************************************ //************************************************************************ //************************************************************************ if (!m_wndStatusBar.CreateStatusBar(this, indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // Fehler beim Erzeugen } // COUNT, CAPS, NUM, OVR, SCROLL m_wndStatusBar.SetMode(1, XSB_TEXT | DT_CENTER); m_wndStatusBar.SetMode(2, XSB_TEXT | DT_CENTER); // Fest (Caps) m_wndStatusBar.SetMode(3, XSB_TEXT | DT_CENTER); // Num m_wndStatusBar.SetMode(4, XSB_BITMAP | XSB_REPEAT); m_wndStatusBar.SetMode(5, XSB_BITMAP | XSB_STRETCH); m_wndStatusBar.SetNumber(1, 0, 0); m_wndStatusBar.SetFgColor(2, RGB( 0, 0, 0), RGB(255, 255, 255)); m_wndStatusBar.SetBkColor(2, RGB( 0, 255, 255), RGB(128, 0, 0)); m_wndStatusBar.SetFont(3, "Arial", 80); m_wndStatusBar.SetBitmap(4, "SCBM1", "SCBM2"); m_wndStatusBar.SetBitmap(5, "BM1", "BM2"); //************************************************************************ //************************************************************************ //************************************************************************ m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { return CFrameWnd::PreCreateWindow(cs); } #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG void CMainFrame::OnUpdateIndicatorOvr(CCmdUI* pCmdUI) { m_wndStatusBar.SetPaneStyle(4, (::GetKeyState(VK_INSERT) & 1) ? 0 : SBPS_DISABLED); } void CMainFrame::OnLButtonDblClk(UINT nFlags, CPoint point) { switch (m_wndStatusBar.GetPaneAtPosition(point)) { case 0: m_wndStatusBar.SavePane(0); m_wndStatusBar.SetMode(0, XSB_PROGRESS); m_wndStatusBar.SetRange(0, 0, 100); SetTimer(0, 10, NULL); break; case 1: m_wndStatusBar.Increment(1, true); m_wndStatusBar.Increment(1, false); break; case 2: if (m_wndStatusBar.GetMode(2) & XSB_HSCROLL) m_wndStatusBar.SetMode(2, m_wndStatusBar.GetMode(2) & ~XSB_HSCROLL); else m_wndStatusBar.SetMode(2, m_wndStatusBar.GetMode(2) | XSB_HSCROLL); break; case 3: if (m_wndStatusBar.GetFontSize(3) == 18) m_wndStatusBar.SetFontSize(3, 12); else m_wndStatusBar.SetFontSize(3, 18); break; case 4: if (m_wndStatusBar.GetMode(4) & XSB_HSCROLL) m_wndStatusBar.SetMode(4, m_wndStatusBar.GetMode(4) & ~XSB_HSCROLL); else m_wndStatusBar.SetMode(4, m_wndStatusBar.GetMode(4) | XSB_HSCROLL); break; case 5: m_wndStatusBar.SavePane(5); m_wndStatusBar.SetMode(5, XSB_NUMBER | XSB_CENTER); m_wndStatusBar.SetFgColor(5, RGB(0, 0, 0), RGB(0, 0, 0)); m_wndStatusBar.SetNumber(5, 0, 0); SetTimer(5, 10, NULL); break; } CFrameWnd::OnLButtonDblClk(nFlags, point); } void CMainFrame::OnRButtonDblClk(UINT nFlags, CPoint point) { switch (m_wndStatusBar.GetPaneAtPosition(point)) { case 0: if (m_wndStatusBar.GetMode(0) & XSB_BITMAP) { m_wndStatusBar.SetMode(0, XSB_TEXT); m_wndStatusBar.SetText(0, "", ""); } else { m_wndStatusBar.SetBitmap(0, "JR", "JR"); m_wndStatusBar.SetMode(0, XSB_BITMAP | XSB_REPEAT); } break; case 1: m_wndStatusBar.Decrement(1, true); m_wndStatusBar.Decrement(1, false); break; case 2: if (m_wndStatusBar.GetMode(2) & XSB_VSCROLL) m_wndStatusBar.SetMode(2, m_wndStatusBar.GetMode(2) & ~XSB_VSCROLL); else m_wndStatusBar.SetMode(2, m_wndStatusBar.GetMode(2) | XSB_VSCROLL); break; case 3: if (m_wndStatusBar.GetFontName(3) == "Arial") m_wndStatusBar.SetFontName(3, "Courier New"); else m_wndStatusBar.SetFontName(3, "Arial"); break; case 4: if (m_wndStatusBar.GetMode(4) & XSB_VSCROLL) m_wndStatusBar.SetMode(4, m_wndStatusBar.GetMode(4) & ~XSB_VSCROLL); else m_wndStatusBar.SetMode(4, m_wndStatusBar.GetMode(4) | XSB_VSCROLL); break; case 5: m_wndStatusBar.SavePane(5); m_wndStatusBar.SetMode(5, XSB_PROGRESS | XSB_SMOOTH); m_wndStatusBar.SetRange(5, 0, 100); SetTimer(9, 10, NULL); break; } CFrameWnd::OnRButtonDblClk(nFlags, point); } void CMainFrame::OnTimer(UINT nIDEvent) { switch (nIDEvent) { case 0: { if (m_wndStatusBar.OffsetPos(0, 1) >= 100) { KillTimer(0); m_wndStatusBar.RestorePane(0); } } break; case 5: { m_wndStatusBar.Increment(5, true); if (m_wndStatusBar.Increment(5, false) >= 100) { KillTimer(5); m_wndStatusBar.RestorePane(5); } } break; case 9: { if (m_wndStatusBar.OffsetPos(5, 1) >= 100) { KillTimer(9); m_wndStatusBar.RestorePane(5); } } break; } }